/*
 * CTaskSession.h
 *
 *  Created on: 2011-10-11
 *      Author: dvrzy
 */

#ifndef CTASKSESSION_H_
#define CTASKSESSION_H_

#include <string>
#include "../Common/CommonLibrary.h"
#include "../Protocol/ProtocolLabel.h"
#include <ctime>

typedef struct _taskSession
{

	uint32_t						sessionid;//该sessionid在添加如manage中时与session时一一对应的
	uint32_t						task_ssid;//每一个socket(一个socket对应一个任务线程),每一个媒体任务节点在媒体任务链表中的任务编号
	uint32_t						ssid;	//每一个任务节点编号
	uint16_t 						ssrc;//一个socket中媒体数据同步源区分
	 int8_t 						pt ;	//媒体任务类型type
	 int8_t						linkmodel;/*0:默认时直连，1：转发模式*/

	 int8_t						csrc[64];

	 int8_t						streamtype;	//0:子码流，1：主码流，2：手机码流
	 int8_t						desstreamtype;	//0:子码流，1：主码流，2：手机码流
    int8_t   						restflag;/*0：继续，1：重新开始*/
    int8_t							cmdflag;/*控制指令，0:停止/初始状态，1：恢复,2:暂停,3:拖拽*/

    int32_t  						sockfd;	/*任务使用的socket*/

    int8_t  						stopflag;/*0:任务有效，1：停止任务删除节点(其他节点还在用),2:正在退出,3:网络异常*/
    int8_t							isready;//任务节点是否添加成功，0：未成功，1：成功
    int8_t 						newflag;/*1：new session*/
    int8_t 						need_questifream;/*1:need*/

    int8_t							mainjumpifream;/*1:need*/
    int8_t 						subjumpifream;/*1:need*/
    int8_t 						mobliejumpifream;/*1:need*/
    uint8_t 						count_i_failed;/*get i fialed */

    uint8_t						ip[32];/*媒体服务器ip*/
    uint16_t						port;/*媒体服务器端口*/
    int8_t							iptype;/*0:默认时ip4，1：ip6*/
    int8_t							porotocltype;/*0:默认是tcp，1：udp*/

    int8_t							fdid[32];//时间段文件id
    uint32_t						channel;//通道号
    uint32_t						channeldes; //通道号备份
    uint32_t						channelmask;//通道掩码

    int8_t							videotype;	//0:普通录像文件，1:报警录像文件 2:普通与报警录像文件
    int8_t 						audio;/*0:no audio,1:need audio*/
    int8_t							resetsend;
    int8_t							isused;//0:未被使用，1:使用
    int32_t						nodeindex;//任务列表中的位子;
    int32_t						getTimeBak;//视频帧备份次数(时间)

    uint64_t						filetotalsize;//文件大小
    uint64_t						fileleftsize;//文件大小
    uint64_t						offset;//偏移量
    DateInfo_Tag	 				startremotetime,endremotetime;
    time_t							intervaltime;//备份时间
    time_t							firstitime;//第一次申请I帧间隔时间

    int8_t							ifirst;//1:第一次使用
    int8_t							palybackid;//回放id
    int8_t							offsetflag;//偏移量标识
    int8_t							reserved;

    uint8_t						streamname[32];


    char							*headbuf;
    char							*databuf;
    int							headlen;
    unsigned int					datalen;

    void*							ptrstreamlyer;//当前节点任务所在任务线程
    void*							dev;//设备数据接口
    //struct _taskSession			*next;
}taskSession_node;


typedef struct
{
	struct
	{
		unsigned char *pAddr[2];
		unsigned int Len[2];
	} DataPack[20];
	int PackCount;
} FrameData_t;

#if 0
typedef struct tag_SeesiontaskList
{
	taskSession_node* head;
	taskSession_node* tail;
   int count;
}SeesiontaskList;

void list_init(  SeesiontaskList*  myroot);
void list_insert( SeesiontaskList* myroot,  taskSession_node* mylistnode);
int list_delete( SeesiontaskList* myroot,  taskSession_node* mylistnode);
taskSession_node* list_searchnode(SeesiontaskList* myroot, const uint8_t pt,const int8_t ssrc);
#endif

unsigned int CalculateCheckSum(FrameData_t *pData, int len);

#endif /* CTASKSESSION_H_ */
